#include "TableWgt.h"
#include <QDebug>
#include <QPushButton>

const int btnSize= 40;//按钮宽度

TableWgt::TableWgt(QWidget *parent)
    :QWidget(parent)
{
    m_isShowVerBtn = false;
    m_isShowHorBtn = false;
    InitUi();
}

TableWgt::~TableWgt()
{

}


void TableWgt::showEvent(QShowEvent *e)
{
    InitLayout();   
}

void TableWgt::InitUi()
{
    //初始化按钮
    upPageBtn = new QPushButton("上一页");
    connect(upPageBtn, SIGNAL(clicked()),this, SLOT(slot_upPageBtn_clicked()));
    upPageBtn->setStyleSheet("QPushButton{background-color:#EFF4F3; image:url(./image/up_uncheck.png)}");

    upRowBtn = new QPushButton("上一行");
    connect(upRowBtn,SIGNAL(clicked()) ,this, SLOT(slot_upRowBtn_clicked()));

    downRowBtn = new QPushButton("下一行");
    connect(downRowBtn,SIGNAL(clicked()),this,SLOT(slot_downRowBtn_clicked()));

    downPageBtn = new QPushButton("下一页");
    connect(downPageBtn,SIGNAL(clicked()),this,SLOT(slot_downPageBtn_clicked()));


    leftPageBtn = new QPushButton("左一页");
    connect(leftPageBtn,SIGNAL(clicked()),this,SLOT(slot_leftPageBtn_clicked()));

    leftRowBtn = new QPushButton("左一行");
    connect(leftRowBtn,SIGNAL(clicked()),this,SLOT(slot_leftRowBtn_clicked()));

    rightRowBtn = new QPushButton("右一行");
    connect(rightRowBtn,SIGNAL(clicked()),this,SLOT(slot_rightRowBtn_clicked()));

    rightPageBtn = new QPushButton("右一页");
    connect(rightPageBtn,SIGNAL(clicked()),this,SLOT(slot_rightPageBtn_clicked()));

    QVector<QPushButton*> all_button;
    all_button.append(upPageBtn);
    all_button.append(upRowBtn);
    all_button.append(downRowBtn);
    all_button.append(downPageBtn);
    all_button.append(leftPageBtn);
    all_button.append(leftRowBtn);
    all_button.append(rightRowBtn);
    all_button.append(rightPageBtn);

    QString stylebtn_str;
    QString stylebtn_uncheck[8] ;
    QString stylebtn_check[8] ;
    QString stylebtn_dis[8] ;

    stylebtn_uncheck[0] = "uppage_uncheck.png";
    stylebtn_uncheck[1] = "up_uncheck.png";
    stylebtn_uncheck[2] = "down_uncheck.png";
    stylebtn_uncheck[3] = "downpage_uncheck.png";
    stylebtn_uncheck[4] = "leftpage_uncheck.png";
    stylebtn_uncheck[5] = "left_uncheck.png";
    stylebtn_uncheck[6] = "right_uncheck.png";
    stylebtn_uncheck[7] = "rightpage_uncheck.png";

    stylebtn_check[0] = "uppage_check.png";
    stylebtn_check[1] = "up_check.png";
    stylebtn_check[2] = "down_check.png";
    stylebtn_check[3] = "downpage_check.png";
    stylebtn_check[4] = "leftpage_check.png";
    stylebtn_check[5] = "left_check.png";
    stylebtn_check[6] = "right_check.png";
    stylebtn_check[7] = "rightpage_check.png";

    stylebtn_dis[0] = "uppage_dis.png";
    stylebtn_dis[1] = "up_dis.png";
    stylebtn_dis[2] = "down_dis.png";
    stylebtn_dis[3] = "downpage_dis.png";
    stylebtn_dis[4] = "leftpage_dis.png";
    stylebtn_dis[5] = "left_dis.png";
    stylebtn_dis[6] = "right_dis.png";
    stylebtn_dis[7] = "rightpage_dis.png";


  for(int i=0;i<all_button.count();i++)
  {
      stylebtn_str =
         "QPushButton                                                                \
        {                                                                            \
            border: 1px solid #20835F;                                               \
            border-top-left-radius: 5px;                                             \
            border-top-right-radius: 5px;                                            \
            border-bottom-left-radius: 5px;                                          \
            border-bottom-right-radius: 5px;                                         \
            background-color:#EFF4F3;                                                \
            color:#20835F;                                                           \
            image: url(:/image/images/"+stylebtn_uncheck[i]+");                         \
        }                                                                            \
        QPushButton:pressed                                                          \
        {                                                                            \
            color:#EFF4F3;                                                           \
            background-color: #20835F;                                               \
            image: url(:/image/images/"+stylebtn_check[i]+");                           \
        }                                                                            \
        QPushButton:disabled                                                         \
        {                                                                            \
            color: rgb(255, 255, 255);                                               \
            background-color: rgb(180, 180, 180);                                    \
            image: url(:/image/images/"+stylebtn_dis[i]+");                         \
        }";
       all_button.at(i)->setText("");
       all_button.at(i)->setStyleSheet(stylebtn_str);
  }

    //初始化表格
    m_tableView = new QTableView(this);

    m_tableView->setFrameShape(QFrame::NoFrame);
    m_tableView->setSelectionBehavior(QAbstractItemView::SelectRows); //设置整行选中
    m_tableView->setSelectionMode(QAbstractItemView::SingleSelection);
    m_tableView->verticalHeader()->setResizeMode(QHeaderView::Fixed);
    m_tableView->verticalHeader()->setDefaultAlignment(Qt::AlignCenter);
    m_tableView->horizontalHeader()->setClickable(false);
    m_tableView->horizontalHeader()->setStretchLastSection(true);
    m_tableView->horizontalHeader()->setResizeMode(QHeaderView::Stretch);

    //隐藏滑动条
    m_tableView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    m_tableView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);


    QString tableStyle = "QTableCornerButton::section{background:rgb(102, 204, 153);border:1px solid#c9c9c9;}"
                                              "QHeaderView::section{background:rgb(102, 204, 153);border:1px solid#c9c9c9;color:black;font:bold}"
                                              "QTableView{background-color:#e2f7eb;"
                                              "alternate-background-color:#ffffff;"
                                              "color: rgb(0, 0, 0);"
                                              "selection-color: rgb(255, 255, 255);"
                                              "selection-background-color: rgb(32, 131, 95);"
                                              "}";

    m_tableView->setAlternatingRowColors(true);//间隔显示颜色
    m_tableView->setStyleSheet(tableStyle);

    m_tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
}

void TableWgt::InitLayout()
{
    int vBtnHeight = (this->height())/4;
    upPageBtn->setFixedSize(btnSize,vBtnHeight);
    upRowBtn->setFixedSize(btnSize,vBtnHeight);
    downRowBtn->setFixedSize(btnSize,vBtnHeight);
    downPageBtn->setFixedSize(btnSize,vBtnHeight);

    QVBoxLayout *vBtnLayout = new QVBoxLayout;
    vBtnLayout->addWidget(upPageBtn);
    vBtnLayout->addWidget(upRowBtn);
    vBtnLayout->addWidget(downRowBtn);
    vBtnLayout->addWidget(downPageBtn);
    vBtnLayout->setMargin(0);
    vBtnLayout->setSpacing(0);


    int hBtnWidth = (this->width())/4;
    leftPageBtn->setFixedSize(hBtnWidth,btnSize);
    leftRowBtn->setFixedSize(hBtnWidth,btnSize);
    rightRowBtn->setFixedSize(hBtnWidth,btnSize);
    rightPageBtn->setFixedSize(hBtnWidth,btnSize);

    QHBoxLayout *hBtnLayout = new QHBoxLayout;
    hBtnLayout->addWidget(leftPageBtn);
    hBtnLayout->addWidget(leftRowBtn);
    hBtnLayout->addWidget(rightRowBtn);
    hBtnLayout->addWidget(rightPageBtn);
    hBtnLayout->setMargin(0);
    hBtnLayout->setSpacing(0);

    QGridLayout *gLayout = new QGridLayout;
    gLayout->setMargin(0);
    gLayout->setSpacing(0);
    gLayout->addWidget(m_tableView,0,0);
    if(m_isShowVerBtn)
    {
        gLayout->addLayout(vBtnLayout,0,1);
    }
    if(m_isShowHorBtn)
    {
        gLayout->addLayout(hBtnLayout,1,0);
    }
    this->setLayout(gLayout);

}

void TableWgt::showWithVerControlBtn(bool isShowVerBtn)
{
    m_isShowVerBtn = isShowVerBtn;
}

void TableWgt::showWithHorControlBtn(bool isShowHorBtn)
{
    m_isShowHorBtn = isShowHorBtn;
}


void TableWgt::sethHeaderHeight(int height)
{
    m_tableView->horizontalHeader()->setFixedHeight(height);
}

void TableWgt::setvHeaderWidth(int width)
{
    m_tableView->verticalHeader()->setFixedWidth(width);
}

void TableWgt::sethHeaderColor(const QColor &color)
{
    QString rgb_str = QString("%1,%2,%3").arg(color.red())
            .arg(color.green()).arg(color.blue());

    m_tableView->horizontalHeader()->setStyleSheet("QHeaderView::section{background:rgb("+rgb_str+");}");
}

void TableWgt::setvHeaderColor(const QColor &color)
{
    QString rgb_str = QString("%1,%2,%3").arg(color.red())
            .arg(color.green()).arg(color.blue());

    m_tableView->verticalHeader()->setStyleSheet("QHeaderView::section{background:rgb("+rgb_str+");}");
}

//设置表格不能编辑
void TableWgt::setTableEditTri(bool isEdit)
{
    if(isEdit)
    {
        m_tableView->setEditTriggers(QAbstractItemView::AllEditTriggers);
    }
    else
    {
        m_tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    }
}

void TableWgt::updateHorControlBtn(int colCount)
{
    int curValue = m_tableView->horizontalScrollBar()->value();

    if(colCount <= 7)
    {
        rightRowBtn->setEnabled(false);
        rightPageBtn->setEnabled(false);
        leftRowBtn->setEnabled(false);
        leftPageBtn->setEnabled(false);

    }
    else
    {
        if(curValue == 0)
        {
            rightRowBtn->setEnabled(true);
            rightPageBtn->setEnabled(true);
            leftRowBtn->setEnabled(false);
            leftPageBtn->setEnabled(false);

        }
        else if(curValue == colCount - 1)
        {
            rightRowBtn->setEnabled(false);
            rightPageBtn->setEnabled(false);
            leftRowBtn->setEnabled(true);
            leftPageBtn->setEnabled(true);

        }
        else
        {
            rightRowBtn->setEnabled(true);
            rightPageBtn->setEnabled(true);
            leftRowBtn->setEnabled(true);
            leftPageBtn->setEnabled(true);
        }
    }

}

void TableWgt::updateVerControlBtn(int rowCount)
{
    int curValue = m_tableView->verticalScrollBar()->value();
    int maxValue = m_tableView->verticalScrollBar()->maximum();


    if(rowCount <= 12)
    {
        downRowBtn->setEnabled(false);
        downPageBtn->setEnabled(false);
        upRowBtn->setEnabled(false);
        upPageBtn->setEnabled(false);
    }
    else
    {

       if(curValue == 0)
       {
           upRowBtn->setEnabled(false);
           upPageBtn->setEnabled(false);
           downRowBtn->setEnabled(true);
           downPageBtn->setEnabled(true);
       }
       else if(curValue == rowCount-1)
       {
           upRowBtn->setEnabled(true);
           upPageBtn->setEnabled(true);
           downRowBtn->setEnabled(false);
           downPageBtn->setEnabled(false);
       }
       else
       {
           upRowBtn->setEnabled(true);
           upPageBtn->setEnabled(true);
           downRowBtn->setEnabled(false);
           downPageBtn->setEnabled(false);
       }
    }

}

//向上翻一页
void TableWgt::slot_upPageBtn_clicked()
{
    int curValue = m_tableView->verticalScrollBar()->value();
    if(curValue > 12)
    {
        m_tableView->verticalScrollBar()->setSliderPosition(curValue - 12);
    }
    else if(curValue > 0)
    {
        m_tableView->verticalScrollBar()->setSliderPosition(0);
    }
    else
    {
        upPageBtn->setEnabled(false);
        upRowBtn->setEnabled(false);
    }
    downRowBtn->setEnabled(true);
    downPageBtn->setEnabled(true);
}

//向上翻一行
void TableWgt::slot_upRowBtn_clicked()
{
    int curValue = m_tableView->verticalScrollBar()->value();
    if(curValue > 0)
    {
        m_tableView->verticalScrollBar()->setSliderPosition(curValue-1);
    }
    curValue = m_tableView->verticalScrollBar()->value();
    if(curValue <= 0)
    {
        upPageBtn->setEnabled(false);
        upRowBtn->setEnabled(false);
    }
    downRowBtn->setEnabled(true);
    downPageBtn->setEnabled(true);
}

//向下翻一行
void TableWgt::slot_downRowBtn_clicked()
{
    int curValue = m_tableView->verticalScrollBar()->value();
    int maxValue = m_tableView->verticalScrollBar()->maximum();

    if(curValue < maxValue)
    {
        m_tableView->verticalScrollBar()->setSliderPosition(curValue+1);
    }
    curValue = m_tableView->verticalScrollBar()->value();

    if(curValue >= maxValue)
    {
        downRowBtn->setEnabled(false);
        downPageBtn->setEnabled(false);
    }
    upPageBtn->setEnabled(true);
    upRowBtn->setEnabled(true);
}

//向下翻一页
void TableWgt::slot_downPageBtn_clicked()
{
    int curValue = m_tableView->verticalScrollBar()->value();
    int maxValue = m_tableView->verticalScrollBar()->maximum();

    if(curValue < maxValue)
    {
        if((curValue + 12) < maxValue )
        {
            m_tableView->verticalScrollBar()->setSliderPosition(curValue+12);
            m_tableView->verticalScrollBar()->setSliderPosition(curValue+12);
        }
        else
        {
            m_tableView->verticalScrollBar()->setSliderPosition(maxValue);
        }
    }
    else
    {
        downRowBtn->setEnabled(false);
        downPageBtn->setEnabled(false);
    }
    upPageBtn->setEnabled(true);
    upRowBtn->setEnabled(true);
}



//向左翻一页
void TableWgt::slot_leftPageBtn_clicked()
{
    int curValue = m_tableView->horizontalScrollBar()->value();
    if(curValue > 7)
    {
        m_tableView->horizontalScrollBar()->setSliderPosition(curValue - 7);
    }
    else if(curValue > 0)
    {
        m_tableView->horizontalScrollBar()->setSliderPosition(0);
    }
    curValue = m_tableView->horizontalScrollBar()->value();
    if(curValue <= 0)
    {
        leftRowBtn->setEnabled(false);
        leftPageBtn->setEnabled(false);
    }
    rightRowBtn->setEnabled(true);
    rightPageBtn->setEnabled(true);

}


//向左翻一行
void TableWgt::slot_leftRowBtn_clicked()
{
    int curValue = m_tableView->horizontalScrollBar()->value();
    if(curValue > 0)
    {
        m_tableView->horizontalScrollBar()->setSliderPosition(curValue-1);
    }
    else
    {
        leftRowBtn->setEnabled(false);
        leftPageBtn->setEnabled(false);
    }
    rightRowBtn->setEnabled(true);
    rightPageBtn->setEnabled(true);

}

//向右翻一行
void TableWgt::slot_rightRowBtn_clicked()
{
    int maxValue = m_tableView->horizontalScrollBar()->maximum();
    int curValue = m_tableView->horizontalScrollBar()->value();
    if(curValue < maxValue)
    {
        m_tableView->horizontalScrollBar()->setSliderPosition(1+curValue);
    }
    else
    {
        rightRowBtn->setEnabled(false);
        rightPageBtn->setEnabled(false);
    }
    leftRowBtn->setEnabled(true);
    leftPageBtn->setEnabled(true);
}


//向右翻一页
void TableWgt::slot_rightPageBtn_clicked()
{
    int maxValue = m_tableView->horizontalScrollBar()->maximum();
    int curValue = m_tableView->horizontalScrollBar()->value();

    if(curValue < maxValue)
    {
        if((curValue + 7) < maxValue-1)
        {
            m_tableView->horizontalScrollBar()->setSliderPosition(7+curValue);
        }
        else
        {
            m_tableView->horizontalScrollBar()->setSliderPosition(maxValue);
        }
    }
    curValue = m_tableView->horizontalScrollBar()->value();
    if(curValue >= maxValue-1)
    {
        rightRowBtn->setEnabled(false);
        rightPageBtn->setEnabled(false);
    }
    leftRowBtn->setEnabled(true);
    leftPageBtn->setEnabled(true);
}
